Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Three.js - "parent.traverse is not a function" error

I have a 3D model of a car. I would like to add a function to change the color of the vehicle upon clicking on one of the color choice but currently I'm getting an error saying "parent.traverse is not a function" at "at setMaterial" and "HTMLDivElement.selectSwatch". Can anyone notice what am I doing wrong?

HTML

<div class="palette" id="js-palette">
    <div class="pallete__slide" id="js-palette-slide"></div>
</div>

JavaScript

let theModel = './cars/scene.gltf'

let activeOption = 'Object_59'

const colors = [
        {
            color: "000000",
        },
        {
            color: "545252",
        },
    ];



function buildColors(colors) {
    for (let [i, color] of colors.entries()) {
        let colorpalette = document.createElement('div');
        colorpalette.classList.add('pallete__colors');

        colorpalette.style.background = '#' + color.color;

        colorpalette.setAttribute('data-key', i);
        palette.append(colorpalette)

    }
}

buildColors(colors)

// Swatches
const swatches = document.querySelectorAll(".pallete__colors");

for (const colorpalette of swatches) {
    colorpalette.addEventListener('click', selectSwatch);
}

function selectSwatch(e) {
    let color = colors[parseInt(e.target.dataset.key)];
    let new_mtl;
    let new_color = parseInt('0x' + color.color)

    if (color.texture) {
        let txt = new THREE.TextureLoader().load(color.texture);

        txt.repeat.set(color.size[0], color.size[1], color.size[2]);
        txt.wrapS = THREE.RepeatWrapping;
        txt.wrapT = THREE.RepeatWrapping;

        new_mtl = new THREE.MeshPhongMaterial({map: txt, shininess: color.shininess ? color.shininess : 10});
    } else {
        new_mtl = new THREE.MeshPhongMaterial({
            color: parseInt('0x' + color.color),
            shininess: color.shininess ? color.shininess : 10
        });
    }
    setMaterial(theModel, activeOption, new_mtl, new_color);
}

function setMaterial(parent, type, mtl, new_color) {
    parent.traverse(o => {
        if (o.isMesh && o.nameID != null) {
            if (o.nameID == type) {
                o.material.color.set(new_color);
            }
        }
    });
}
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda